Use case: USART communication in polling mode

Sequence diagram

USART processing in polling mode

@startuml
participant "User Application" as p1
participant "HAL USART driver" as p2

== USART Processing in polling mode ==
alt polling
p1->p2: HAL_USART_Transmit(&husart,\n                                aTxBuffer,\n                                DATA_TO_SEND_SIZE,\n                                100)
note over p2 #00FF00
Transmitting data ongoing
end note

p2-->p1: <color #Green> HAL_OK
else
p1->p2: HAL_USART_Receive(&husart,\n                                aRxBuffer,\n                                DATA_TO_RECEIVE_SIZE,\n                                100)
note over p2 #00FF00
Receiving data ongoing
end note
p2-->p1: <color #Green> HAL_OK

else
p1->p2: HAL_USART_TransmitReceive(&husart,\n                                            aTxBuffer,\n                                            aRxBuffer,\n                                            DATA_TO_SEND_SIZE,\n                                            100)
note over p2 #00FF00
Transmitting and Receiving data ongoing
end note
p2-->p1: <color #Green> HAL_OK
end
@enduml

Code snippet

HAL1

HAL2

 #define DATA_TO_SEND_SIZE           256

 #define DATA_TO_RECEIVE_SIZE       DATA_TO_SEND_SIZE


 uint8_t aTxBuffer[] = " **** USART_SlaveMode **** ";


 uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];

 USART_HandleTypeDef husart;


 HAL_USART_Init(&husart);




 HAL_USART_Receive(&husart, aRxBuffer,
                        DATA_TO_RECEIVE_SIZE, 100)

HAL_USART_Transmit(&husart, aTxBuffer,
                          DATA_TO_SEND_SIZE, 100)

HAL_USART_TransmitReceive(&husart, aTxBuffer,
                           aRxBuffer, DATA_TO_SEND_SIZE, 100)
#define DATA_TO_SEND_SIZE           256

#define DATA_TO_RECEIVE_SIZE       DATA_TO_SEND_SIZE


uint8_t aTxBuffer[] = " **** USART_SlaveMode **** ";


uint8_t aRxBuffer[DATA_TO_RECEIVE_SIZE];

hal_usart_handle_t husart;
hal_usart_config_t my_config;

HAL_USART_Init(&husart, HAL_USART1)

/* add config for usart instance */
HAL_USART_SetConfig(&husart, &my_config)

HAL_USART_Receive(&husart, aRxBuffer,
                        DATA_TO_RECEIVE_SIZE, 100)

HAL_USART_Transmit(&husart, aTxBuffer,
                        DATA_TO_SEND_SIZE, 100)


HAL_USART_TransmitReceive(&husart, aTxBuffer,
                          aRxBuffer, DATA_TO_SEND_SIZE, 100)

Key changes

  1. In HAL2, the USART instance is provided to HAL_USART_Init() and configuration is separated using HAL_USART_SetConfig().